<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

<script>
// 递归
  // 计算机发展的历史：javascript、JAVA ... 都叫 高级语言
    // 高级语言 都有 for / while 循环

// 函数 先于 循环 出现：

/* 函数内部 执行/调用 自己：利用 函数自己调用 自己的特性，能实现「循环」
  function say(n) {
    console.log('say', n);
    say(n);
  }

  say('YO~');
 */


// sum(5)  // 5 + 4 + 3 + 2 + 1

/* 
  var result = 0;
  var i = 5;
  while (i !== 0) {
    result += i;
    i--;
  }
  console.log('result', result);
 */
// 将 上面的 循环 用 递归改写：
  // 递归的关键，必须要有 ”出口“ 来终止 递归的调用
function sum(n) {
  // sum()
  if (n === 1) {
    return 1
  }
  return n + sum(n - 1);
      // 5 +            sum(5 - 1) 
      // 5 +            4 + sum(4 - 1)
      // 5 + 4 +            3 +  sum(3 - 1)
      // 5 + 4 +            3 + 2 + sum(2 - 1)
      // 5 + 4 +            3 + 2      + 1
}
console.log('递归', sum(5));

</script>